###########################################
#
#  Chicken Scratch
#
#  Use arrow keys to move, and hold down
#  to dash. Press space/E to peck at bugs.
#  Press Q to emit a powerful bug-detecting
#  squawk. See how fast you can catch all
#  those crawly critters!
#
#  by John Earnest
#
###########################################

:calc CODE_POS { 0x200  }
:calc DATA_POS { 0x1000 }
:macro to-code { :calc DATA_POS { HERE }  :org { CODE_POS } }
:macro to-data { :calc CODE_POS { HERE }  :org { DATA_POS } }

:macro pointer X {
	:byte { X >> 8 }
	:byte { X }
}
:macro unpack X {
	:calc hi { 0xFF & X >> 8 }  v0 := hi
	:calc lo { 0xFF & X      }  v1 := lo
}
:macro indirect LABEL {
	0xF0 0x00 : LABEL 0x00 0x00
}

:const DIR_UP     0
:const DIR_LEFT   1
:const DIR_DOWN   2
:const DIR_RIGHT  3

:const STATE_IDLE 0
:const STATE_WALK 1
:const STATE_RUN  2
:const STATE_BUMP 3
:const STATE_PECK 4

:alias map-offset-y vd # in tiles
:alias map-offset-x vc # in tiles
:alias player-timer vb # used for animation delay
:alias player-state va # see STATE_ constants
:alias player-dir   v9 # see DIR_ constants
:alias player-y     v8 # in tiles
:alias player-x     v7 # in tiles

: sync
	loop
		vf := delay
		if vf != 0 then
	again
	vf := 4
	delay := vf
;

: short-pause
	sync sync sync sync
;

: strip-blit
	# x,y in v0,v1
	v2 := 0
	v3 := 32
	loop
		sprite v0 v1 0
		i += v3
		v0 += 16
		v2 += 1
		if v2 == 4 then return
	again

: blit
	v0 := 0
	v1 := 0
	v2 := 16
	v3 := 32
	v4 := 48
	loop
		sprite v0 v1 0  i += v5
		sprite v0 v2 0  i += v5
		sprite v0 v3 0  i += v5
		sprite v0 v4 0  i += v5
		v0 += 16
		if v0 == 128 then return
	again

: screen-blit       v5 := 32 jump blit
: screen-blit-color v5 := 64 jump blit

###########################################
#
#  Sound Effects
#
###########################################

to-data

: sound-scratch 1  0x02 0x21 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
: sound-rumble  4  0x02 0x21 0x00 0x08 0x66 0x00 0xD8 0x01 0xB0 0x20 0x10 0x10 0x00 0x00 0x00 0x00
: sound-miss    1  0x02 0x21 0x00 0x08 0x66 0x00 0xD8 0x01 0xB0 0x20 0x10 0x10 0x00 0x00 0x00 0x00
: sound-hit     2  0xFF 0x00 0xFF 0x00 0xFF 0x00 0xFF 0x00 0xFF 0x00 0xFF 0x00 0xFF 0x00 0xFF 0x00
: sound-boost   1  0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00

to-code

: play-sound
	load v0
	vf := 1
	i += vf
	audio
	buzzer := v0
;

:macro sfx SOUND {
	i := long SOUND
	play-sound
}

###########################################
#
#  Title Sequence
#
###########################################

to-data

: title-chicken # left-to-right, 8 wide stripes
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x04 0x02 0x06 0x00 0x00 0x00 0x04 0x00 0x00
	0x30 0x0F 0x0D 0x18 0x18 0x38 0x38 0x30 0x30 0xE0 0x78 0x1C 0x0E 0x07 0x03
	0x00 0xF0 0xF8 0x1C 0x04 0x00 0x00 0x00 0x00 0x00 0x00 0x08 0x38 0xF0 0xE0
	0x00 0x00 0x01 0xC1 0xC1 0xC1 0xC0 0xE3 0xFE 0x78 0x60 0x70 0x70 0x70 0x10
	0x10 0x00 0x90 0x98 0x98 0x98 0x98 0x99 0x99 0x99 0xD8 0xD8 0x18 0x18 0x08
	0xE0 0x3F 0x33 0x30 0x60 0x60 0xC0 0xC0 0x80 0xC0 0x60 0x33 0x1F 0x0E 0x0C
	0x00 0x00 0xF2 0x03 0x03 0x01 0x01 0x03 0x01 0x21 0xE0 0xC8 0x10 0x00 0x00
	0x10 0x20 0x0C 0x18 0x30 0x70 0xC0 0x80 0xFE 0xFF 0x80 0xC0 0xC0 0xC0 0x40
	0x00 0x00 0x00 0x1C 0x1F 0x08 0x08 0x08 0x0F 0xDF 0x58 0x18 0x38 0x1F 0x17
	0x00 0x00 0x00 0x0C 0xE7 0x07 0x07 0x07 0x03 0xC3 0x03 0x03 0x03 0x01 0xC1
	0x00 0x00 0x18 0x1C 0x0C 0xCC 0xFC 0x1C 0x04 0x06 0x06 0x02 0x02 0x02 0x00
	0x00 0x00 0x00 0x00 0x20 0x00 0x00 0x60 0xC0 0x00 0x30 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
: title-scratch # right-to-left, 8 wide stripes
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x10 0x00 0x10 0x90 0xA2 0x60 0x5C 0x40 0xC0 0x80 0x00 0x00
	0x10 0x10 0x30 0x30 0x70 0x61 0x60 0xE0 0xC0 0xF0 0xC0 0x80 0x80 0x02 0x00
	0x00 0x40 0x60 0x60 0x60 0x60 0xE0 0x7C 0x5F 0x47 0xC0 0xC1 0xC1 0xC3 0x03
	0x00 0xC0 0xFF 0x7E 0x0C 0x00 0x01 0x00 0x00 0x00 0x00 0x3C 0x78 0xF0 0xE0
	0xC6 0x87 0x0D 0x0C 0x18 0x18 0x30 0x20 0x60 0x38 0x1C 0x06 0x03 0x01 0x00
	0x81 0x3F 0xFE 0xF8 0x18 0x18 0x0C 0x0C 0x0C 0x06 0x06 0x06 0x02 0x02 0x02
	0x01 0xC0 0xE1 0x71 0x38 0x10 0x10 0xF8 0xF8 0x0F 0x08 0x08 0x0C 0x00 0x00
	0x03 0x01 0xC3 0xC2 0x82 0x06 0x0E 0x07 0x04 0xE4 0x64 0x0C 0x4C 0x08 0x00
	0x00 0x98 0xFF 0xC0 0xC1 0xC7 0xF8 0xFC 0x47 0x63 0x60 0x60 0x60 0x20 0x10
	0x00 0xC1 0xF9 0x38 0x0C 0x00 0x00 0x03 0x00 0x02 0x0C 0x38 0x60 0xC0 0x00
	0x18 0x1F 0x09 0x18 0x30 0x30 0x60 0xE0 0x70 0x78 0x3C 0x1E 0x06 0x03 0x03
	0x00 0xFC 0xFE 0x07 0x00 0x00 0x00 0x80 0x78 0x07 0x0E 0x18 0x30 0xF0 0xE0
	0x01 0x03 0x03 0x07 0x06 0x0E 0x1C 0x1F 0x00 0x00 0x00 0x00 0x86 0x43 0x00
	0x00 0x00 0x00 0x00 0x04 0x08 0x09 0x08 0x05 0xB6 0x0C 0x02 0x01 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
: title-press-space # 4x 16x16 sprites, left-to-right
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x07 0x39 0x04 0xA5
	0x07 0x39 0x04 0x25 0x04 0x25 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xE7 0x38 0x08 0x40
	0xCF 0x78 0x01 0x08 0xEE 0x70 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x0E 0xE3 0x10 0x94
	0x1E 0xE7 0x02 0x84 0x1C 0x84 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x1D 0xE0 0xA1 0x00
	0xA1 0xC0 0xA1 0x00 0x9D 0xE0 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00

to-code

: title
	v0 := 0  # x (l2r)
	v1 := 12 # y
	v2 := 0  # image offset
	loop
		plane 3
		i := long chicken-right-stand
		sprite v0 v1 0
		sync
		sprite v0 v1 0

		plane 1
		i := long title-chicken
		i += v2
		sprite v0 v1 15
		v2 += 15
		v0 += 4

		plane 3
		i := long chicken-right-hop
		sprite v0 v1 0
		sync
		sprite v0 v1 0

		v0 += 4
		if v0 != 112 then
	again

	short-pause

	v0 := 120
	v1 := 31
	v2 := 0 # offset
	loop
		if v0 > 8 begin
			plane 3
			v0 -= 8
			i := long chicken-left-stand
			sprite v0 v1 0
			sync
			sprite v0 v1 0
			v0 += 8
		end

		plane 1
		i := long title-scratch
		i += v2
		sprite v0 v1 15
		v2 += 15
		v0 -= 4

		if v0 > 8 begin
			plane 3
			v0 -= 8
			i := long chicken-left-hop
			sprite v0 v1 0
			sync
			sprite v0 v1 0
			v0 += 8
		end

		v0 -= 4
		if v0 != 0 then
	again
	short-pause

: wait-for-space
	plane 1
	v0 := OCTO_KEY_E
	v1 := 0 # state
	v2 := 0
	loop
		# blink "press space"
		v2 += 1
		if v2 == 32 begin
			v2 := 4
			v3 := 32
			v4 := 52
			v5 := 32
			i := long title-press-space
			loop
				sprite v3 v4 0
				i += v5
				v3 += 16
				v2 -= 1
				if v2 != 0 then
			again
		end
		# wait for a full press and release
		# before exiting the title screen...
		if v1 == 2 begin
			if v0 -key begin
				plane 3
				clear
				return
			end
		end
		if v1 == 1 begin
			if v0 key then v1 := 2
		end
		if v1 == 0 begin
			if v0 -key then v1 := 1
		end
		# wait for a frame to expire...
		loop
			vf := delay
			if vf != 0 then
		again
		vf := 1
		delay := vf
	again

###########################################
#
#  Catch Bugs
#
###########################################

to-data

: strip-catch
	0x01 0xC0 0x23 0xE0 0x0F 0x30 0x0E 0x10 0x1C 0x08 0x30 0x04 0x60 0x00 0x60 0x00
	0x30 0x00 0x30 0x04 0x18 0x09 0x2C 0x31 0x16 0x63 0x03 0xE3 0x01 0xC4 0x00 0x80
	0x08 0x00 0x4C 0x07 0x1C 0x1F 0x1C 0x33 0x36 0x03 0x36 0x01 0x66 0x01 0x62 0x01
	0xFF 0xA0 0xFB 0x00 0x83 0x00 0x81 0x00 0x01 0x80 0x01 0x80 0x01 0x00 0x00 0x00
	0xF8 0x30 0xE0 0x7C 0x00 0xCF 0x01 0x81 0x83 0x00 0x82 0x00 0x86 0x00 0xB4 0x00
	0x8C 0x00 0xC6 0x00 0x42 0x01 0x61 0x07 0x60 0xCE 0x20 0x7C 0x00 0x38 0x10 0x30
	0x00 0x02 0x06 0x00 0x06 0x06 0x8C 0x06 0x0C 0x06 0x0C 0x0E 0x0F 0x8C 0x0F 0xFC
	0x0C 0x78 0x8C 0x18 0x0C 0x32 0x1C 0x34 0x18 0x60 0x18 0x60 0x10 0x40 0x00 0x80 0xFF
: strip-bugs
	0x00 0x3F 0x07 0xFF 0x03 0xC3 0x0B 0x87 0x03 0x0E 0x01 0x1F 0x01 0x9F 0x01 0xB0
	0x00 0xE4 0x00 0x40 0x01 0x60 0x01 0x20 0x00 0xB0 0x00 0x11 0x00 0x1F 0x00 0x0E
	0xF0 0x00 0xC3 0x80 0x93 0x80 0x03 0x80 0x03 0xC0 0xF1 0xC0 0xFF 0xC0 0x7E 0xC0
	0x1C 0xE0 0x18 0xE0 0x30 0x60 0x60 0x30 0xC0 0x37 0x80 0x3F 0x00 0x10 0x00 0x00
	0x20 0x70 0x10 0xFC 0x30 0xEF 0xB1 0x83 0xB3 0xC0 0xB7 0x40 0xB6 0x0E 0x34 0x87
	0x32 0x01 0x33 0x80 0x21 0xC3 0x60 0xE7 0xE0 0x6E 0xC0 0x38 0x00 0x10 0x00 0x00
	0x00 0xE0 0x03 0xFC 0x17 0x9E 0x8E 0x0F 0x03 0x01 0x01 0xC0 0x00 0xF0 0x80 0x70
	0xE0 0x3C 0xE4 0x0E 0x87 0x03 0x03 0x87 0x03 0xDF 0x01 0xFC 0x00 0x38 0x00 0x00
	0x00 0x00 0x01 0x80 0x03 0xC0 0x03 0xC0 0x83 0x80 0x27 0x00 0x07 0x00 0x06 0x40
	0x0C 0x80 0x08 0x00 0xC0 0x00 0x90 0x00 0x30 0x00 0x20 0x00 0x00 0x00 0x00 0x00 0xFF

: number-4
	0x00 0x00 0x0C 0x10 0x0C 0x30 0x18 0x60 0x38 0x60 0x30 0xE0 0x7F 0xFE 0x7F 0xF0
	0x01 0xC0 0x41 0x80 0x03 0x80 0x03 0x80 0x03 0x80 0x07 0xC0 0x03 0xE0 0x00 0x74
: number-6
	0x00 0x00 0x03 0xD0 0x07 0x80 0x0E 0x00 0x1C 0x00 0x38 0x00 0x30 0x00 0x33 0xF8
	0x37 0xFC 0x3E 0x0C 0x3C 0x04 0x1C 0x0C 0x1E 0x3C 0x2F 0xFC 0x03 0xF8 0x00 0x00
: number-8
	0x0F 0xC0 0x1F 0xE8 0x18 0x60 0x0E 0x30 0x07 0xF0 0x1F 0xE0 0x3F 0xF0 0x70 0x38
	0x60 0x18 0x40 0x18 0x60 0x98 0x70 0x38 0x3F 0xF8 0x5F 0xF0 0x00 0x04 0x00 0x00

to-code

: frame
	loop
		vf := delay
		if vf != 0 then
	again
	vf := 1
	delay := vf
;

: shake
	sfx sound-rumble
	scroll-up   2 frame
	scroll-down 4 frame
	scroll-up   3 frame
	scroll-down 2 frame
	scroll-up   1 frame
	short-pause
;

: catch-bugs
	plane 1
	v0 := 32
	v1 := 4
	v2 := 32 # stride
	i := long strip-catch
	loop
		sprite v0 v1 0
		i += v2
		v0 += 16
		load vf - vf
		if vf != 0xFF then
	again
	shake

	i := current-level
	load v0
	i := long number-4
	if v0 == 1 then i := long number-6
	if v0 == 2 then i := long number-8
	v0 := 56
	v1 := 24
	sprite v0 v1 0
	shake

	v0 := 24
	v1 := 45
	v2 := 32 # stride
	i := long strip-bugs
	loop
		sprite v0 v1 0
		i += v2
		v0 += 16
		load vf - vf
		if vf != 0xFF then
	again
	shake

	short-pause
	short-pause

	plane 3
	clear
;

###########################################
#
#  Caught!
#
###########################################

to-data

: caught-small
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x01 0xE0 0x02 0x11 0x05 0xE2 0x0A 0x02 0x12 0x05 0x14 0x05
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x01 0xE0 0x02 0x01 0x04 0x01 0x0C 0x02 0x08 0x02
	0x14 0x08 0x0A 0x09 0x09 0xEA 0x04 0x1A 0x02 0x1A 0x01 0xE4 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x08 0x07 0x04 0x06 0x06 0x04 0x03 0xE4 0x01 0xE4 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0xE3 0x0C 0x12 0x8B 0xEA 0x8B 0x2A 0x93 0x2A 0x93
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xE1 0x04 0x11 0x04 0x11 0x0C 0x11 0x0C
	0xEA 0x95 0x0A 0xA4 0xEA 0xA4 0x2A 0x48 0x29 0x10 0x38 0xE0 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x11 0x08 0xF1 0x18 0x11 0x18 0x11 0xB0 0x10 0xE0 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x1E 0x00 0x61 0x30 0x99 0x28 0x26 0x29 0x40 0x29 0x5F 0xAF 0x50 0xA0
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x1E 0x00 0x66 0x10 0xC0 0x10 0x80 0x10 0x80 0x10 0x8F 0x1F
	0x4C 0xAF 0xBC 0xA9 0x80 0xA9 0x41 0x28 0x3E 0x18 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x83 0x10 0x43 0x10 0x7F 0x10 0x3E 0x10 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0xDF 0xFC 0x20 0x04 0x3E 0x78 0x22 0x80 0x22 0x80
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xDF 0xF8 0xC1 0x80 0xC1 0x00 0xC1 0x00
	0x22 0x80 0x22 0x80 0x22 0x80 0xA2 0x80 0xE1 0x40 0x01 0x80 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0xC1 0x00 0xC1 0x00 0xC1 0x00 0x41 0x00 0x00 0x80 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00

: caught-med
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x01 0xFC 0x02 0x04 0x04 0x04 0x09 0xF8 0x12 0x00 0x12 0x00 0x22 0x00 0x24 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x01 0xF8 0x03 0xF8 0x06 0x00 0x0C 0x00 0x0C 0x00 0x1C 0x00 0x18 0x00
	0x24 0x00 0x24 0x00 0x24 0x00 0x12 0x00 0x11 0x00 0x08 0xFC 0x04 0x02 0x03 0x02
	0x00 0xFC 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x18 0x00 0x18 0x00 0x18 0x00 0x0C 0x00 0x0E 0x00 0x07 0x00 0x03 0xFC 0x00 0xFC
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x07 0xE1 0x08 0x11 0x10 0x11 0x27 0xC9 0x48 0x29 0x48 0x29 0x48 0x29
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x07 0xE0 0x0F 0xE0 0x18 0x30 0x30 0x10 0x30 0x10 0x30 0x10
	0x48 0x29 0x8F 0x29 0x80 0xE9 0x8F 0x09 0x90 0xC8 0x90 0x48 0x90 0x48 0x90 0x48
	0x90 0x48 0x60 0x78 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x30 0x10 0x70 0x10 0x7F 0x10 0x70 0xF0 0x60 0x30 0x60 0x30 0x60 0x30 0x60 0x30
	0x60 0x30 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0xC0 0x21 0x20 0x51 0x20 0x49 0x20 0x4A 0x20 0x4A 0x20 0x8A 0x20 0x8A 0x20 0x8A
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0xC0 0x20 0xC0 0x30 0xC0 0x31 0xC0 0x31 0xC0 0x71 0xC0 0x71 0xC0 0x71
	0x20 0x92 0x20 0x92 0x21 0x21 0x21 0x21 0xA1 0x21 0x92 0x40 0x8C 0x40 0x40 0x80
	0x3F 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0xC0 0x61 0xC0 0x61 0xC0 0xC0 0xC0 0xC0 0x40 0xC0 0x61 0x80 0x73 0x80 0x3F 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x0F 0xE0 0xF0 0x10
	0x00 0x11 0x00 0x11 0x0F 0x21 0x10 0xC1 0x20 0x01 0x27 0xF1 0x28 0x09 0x28 0x05
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x0F 0xE0
	0xFF 0xE0 0xFF 0xE0 0xF0 0xC0 0xE0 0x00 0xC0 0x00 0xC0 0x00 0xC7 0xF0 0xC7 0xF8
	0x28 0x05 0x27 0x84 0x20 0x84 0x1F 0x84 0x00 0x08 0x80 0x10 0x40 0x20 0x3F 0xC0
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0xC7 0xF8 0xC0 0x78 0xC0 0x78 0xE0 0x78 0xFF 0xF0 0x7F 0xE0 0x3F 0xC0 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xE0 0x00
	0x10 0x03 0x10 0x74 0x10 0x8C 0x10 0x8C 0x10 0x8B 0x10 0x88 0x1F 0x88 0x00 0x08
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0xE0 0x00 0xE0 0x03 0xE0 0x73 0xE0 0x73 0xE0 0x70 0xE0 0x70 0xE0 0x70 0xFF 0xF0
	0x00 0x08 0xBF 0x88 0xA0 0x88 0xA0 0x88 0xA0 0x88 0x90 0x48 0x90 0x48 0x90 0x48
	0x60 0x30 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0xFF 0xF0 0x40 0x70 0x40 0x70 0x40 0x70 0x40 0x70 0x60 0x30 0x60 0x30 0x60 0x30
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0xFF 0xFC 0x00 0x02 0x00 0x02 0x00 0x02 0xF1 0xFC 0x11 0x00 0x11 0x00 0x11 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0xFF 0xFC 0xFF 0xFC 0xFF 0xFC 0x0E 0x00 0x0E 0x00 0x0E 0x00 0x0E 0x00
	0x11 0x00 0x11 0x00 0x11 0x00 0x11 0x00 0x11 0x00 0x11 0x00 0x11 0x00 0x08 0x80
	0x08 0x80 0x0F 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x0E 0x00 0x0E 0x00 0x0E 0x00 0x0E 0x00 0x0E 0x00 0x0E 0x00 0x0E 0x00 0x07 0x00
	0x07 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00

: caught-large
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x1F
	0x00 0x60 0x00 0x80 0x01 0x07 0x02 0x18 0x02 0x20 0x02 0x20 0x04 0x20 0x04 0x40
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x1F 0x00 0x7F 0x00 0xF8 0x01 0xE0 0x01 0xC0 0x01 0xC0 0x03 0xC0 0x03 0x80
	0x04 0x40 0x04 0x40 0x04 0x40 0x04 0x40 0x04 0x40 0x02 0x20 0x02 0x10 0x01 0x0F
	0x00 0x80 0x00 0x40 0x00 0x30 0x00 0x0F 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x03 0x80 0x03 0x80 0x03 0x80 0x03 0x80 0x03 0x80 0x01 0xC0 0x01 0xE0 0x00 0xF0
	0x00 0x7F 0x00 0x3F 0x00 0x0F 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xF0 0x00
	0x10 0x07 0x10 0x18 0xE0 0x20 0x00 0x40 0x00 0x87 0x00 0x88 0x00 0x90 0x00 0x90
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0xE0 0x00 0xE0 0x07 0x00 0x1F 0x00 0x3F 0x00 0x78 0x00 0x70 0x00 0x60 0x00 0x60
	0x00 0x90 0x00 0x90 0x01 0x1F 0x01 0x00 0x01 0x00 0x01 0x1F 0x01 0x10 0xF2 0x10
	0x0A 0x10 0x0A 0x10 0x0A 0x20 0xF2 0x20 0x02 0x20 0x01 0xE0 0x00 0x00 0x00 0x00
	0x00 0x60 0x00 0x60 0x00 0xE0 0x00 0xFF 0x00 0xFF 0x00 0xE0 0x00 0xE0 0x01 0xE0
	0xF1 0xE0 0xF1 0xE0 0xF1 0xC0 0x01 0xC0 0x01 0xC0 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x1C
	0xF0 0x22 0x08 0x22 0x04 0x22 0x02 0x22 0xE2 0x22 0x12 0x22 0x12 0x22 0x12 0x22
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x1C 0xF0 0x1C 0xF8 0x1C 0xFC 0x1C 0x1C 0x1C 0x0C 0x1C 0x0C 0x1C 0x0C 0x1C
	0x12 0x22 0x12 0x22 0x92 0x22 0x72 0x22 0x02 0x22 0x82 0x22 0x62 0x12 0x22 0x11
	0x22 0x10 0x22 0x10 0x22 0x08 0x22 0x07 0x3E 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x0C 0x1C 0x0C 0x1C 0x0C 0x1C 0x8C 0x1C 0xFC 0x1C 0x7C 0x1C 0x1C 0x0C 0x1C 0x0E
	0x1C 0x0F 0x1C 0x0F 0x1C 0x07 0x1C 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x01 0x01 0x82
	0x02 0x42 0x02 0x22 0x02 0x24 0x02 0x24 0x02 0x24 0x04 0x24 0x04 0x24 0x04 0x24
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x01
	0x01 0x81 0x01 0xC1 0x01 0xC3 0x01 0xC3 0x01 0xC3 0x03 0xC3 0x03 0xC3 0x03 0xC3
	0x04 0x44 0x04 0x44 0x04 0x44 0x08 0x82 0x08 0x82 0x08 0x82 0x08 0x82 0x11 0x01
	0xE1 0x01 0x01 0x00 0x02 0x00 0xFC 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x03 0x83 0x03 0x83 0x03 0x83 0x07 0x01 0x07 0x01 0x07 0x01 0x07 0x01 0x0E 0x00
	0x1E 0x00 0xFE 0x00 0xFC 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x07 0xF8 0xF8 0x04 0x00 0x04 0x00 0x02
	0x00 0x04 0x0F 0xC8 0x10 0x30 0x20 0x00 0x20 0x00 0x23 0xFE 0x24 0x01 0x24 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x07 0xF8 0xFF 0xF8 0xFF 0xFC
	0xFF 0xF8 0xF0 0x30 0xE0 0x00 0xC0 0x00 0xC0 0x00 0xC0 0x00 0xC3 0xFE 0xC3 0xFF
	0x24 0x00 0x24 0x00 0x23 0xE0 0x20 0x20 0x10 0x20 0x0F 0xE0 0x00 0x01 0x00 0x02
	0x00 0x04 0xC0 0x08 0x3F 0xF0 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0xC3 0xFF 0xC3 0xFF 0xC0 0x1F 0xC0 0x1F 0xE0 0x1F 0xF0 0x1F 0xFF 0xFE 0xFF 0xFC
	0xFF 0xF8 0x3F 0xF0 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x0F 0x00 0x10 0x80 0x10 0x80
	0x10 0x81 0x10 0x82 0x10 0x82 0x10 0x82 0x10 0x82 0x10 0x82 0x10 0xFE 0x90 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x0F 0x00 0x0F 0x00
	0x0F 0x00 0x0F 0x01 0x0F 0x01 0x0F 0x01 0x0F 0x01 0x0F 0x01 0x0F 0x01 0x0F 0xFF
	0x90 0x00 0x90 0x00 0x89 0xFE 0x89 0x02 0x89 0x02 0x89 0x02 0x09 0x02 0x08 0x81
	0x08 0x81 0x08 0x81 0x08 0x81 0x07 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x0F 0xFF 0x0F 0xFF 0x06 0x01 0x06 0x01 0x06 0x01 0x06 0x01 0x06 0x01 0x07 0x00
	0x07 0x00 0x07 0x00 0x07 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x03 0xFF
	0xE4 0x00 0x14 0x00 0x14 0x00 0x14 0x00 0x13 0xF8 0x10 0x08 0x10 0x08 0x10 0x08
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x03 0xFF 0xE3 0xFF 0xE3 0xFF 0xE3 0xFF 0xE0 0x07 0xE0 0x07 0xE0 0x07 0xE0 0x07
	0x10 0x08 0x10 0x08 0x08 0x08 0x08 0x08 0x08 0x08 0x08 0x08 0x08 0x08 0x08 0x08
	0x08 0x08 0x08 0x04 0x08 0x04 0xF0 0x04 0x00 0x03 0x00 0x00 0x00 0x00 0x00 0x00
	0xE0 0x07 0xE0 0x07 0xF0 0x07 0xF0 0x07 0xF0 0x07 0xF0 0x07 0xF0 0x07 0xF0 0x07
	0xF0 0x07 0xF0 0x03 0xF0 0x03 0x00 0x03 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0xC0
	0x00 0x20 0x00 0x20 0x00 0x10 0x00 0x10 0x7F 0xE0 0x40 0x00 0x40 0x00 0x40 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0xFF 0xC0 0xFF 0xC0 0xFF 0xE0 0xFF 0xE0 0x80 0x00 0x80 0x00 0x80 0x00 0x80 0x00
	0x40 0x00 0x40 0x00 0x40 0x00 0x40 0x00 0x40 0x00 0x20 0x00 0x20 0x00 0x20 0x00
	0x20 0x00 0x20 0x00 0x10 0x00 0x10 0x00 0xE0 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x80 0x00 0x80 0x00 0x80 0x00 0x80 0x00 0x80 0x00 0xC0 0x00 0xC0 0x00 0xC0 0x00
	0xC0 0x00 0xC0 0x00 0xE0 0x00 0xE0 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00

to-code

: caught
	:macro caught-frame FRAME {
		i := long FRAME
		screen-blit-color
		sync
	}
	caught-frame caught-small
	clear
	caught-frame caught-med
	clear
	caught-frame caught-large
	shake
	short-pause
	clear
;

###########################################
#
#  Scoring
#
###########################################

to-data

: level-1 # 4x 16x16 squares, left to right
	0x08 0x00 0x00 0x00 0x08 0x00 0x1C 0x02 0x0C 0x03 0x0C 0x03 0x04 0x03 0x16 0x01
	0x06 0x03 0x06 0x01 0x07 0x04 0x03 0x98 0x03 0xF8 0x03 0xF0 0x01 0xC0 0x01 0x00
	0x00 0x00 0x00 0x00 0x31 0x00 0x60 0x00 0xC0 0x80 0x0C 0x83 0x7C 0x83 0xC0 0xC6
	0x00 0xCE 0x82 0x5C 0x9E 0x5C 0xFC 0x78 0xF0 0x78 0x00 0x70 0x40 0x70 0x00 0x20
	0x00 0x00 0x00 0x00 0x00 0x02 0x00 0x06 0x3F 0xC6 0x3F 0x06 0x30 0x0C 0x30 0x0C
	0x7F 0x8C 0x3E 0x0C 0x30 0x58 0x30 0x3C 0x78 0x1F 0x3F 0xA7 0x3E 0x00 0x20 0x00
	0x00 0x00 0x00 0x38 0x00 0x78 0x01 0xB8 0x00 0x30 0x00 0x70 0x00 0x70 0x00 0x60
	0x00 0xE0 0x00 0xE0 0x00 0xE0 0x06 0xC0 0x83 0xF0 0xC0 0xF8 0x00 0x00 0x00 0x00
: level-2
	0x20 0x00 0x00 0x00 0x20 0x00 0x70 0x09 0x30 0x0F 0x30 0x0C 0x10 0x0D 0x58 0x07
	0x18 0x0C 0x18 0x06 0x1C 0x12 0x0E 0x63 0x0F 0xE3 0x0F 0xC0 0x07 0x01 0x04 0x00
	0x00 0x00 0x00 0x00 0xC4 0x00 0x80 0x00 0x02 0x00 0x32 0x0C 0xF2 0x0C 0x03 0x18
	0x03 0x39 0x09 0x70 0x79 0x70 0xF1 0xE0 0xC1 0xE1 0x01 0xC0 0x01 0xC0 0x00 0x80
	0x00 0x00 0x00 0x00 0x00 0x08 0x00 0x18 0xFF 0x18 0xFC 0x18 0xC0 0x30 0xC0 0x30
	0xFE 0x30 0xF8 0x30 0xC1 0x60 0xC0 0xF0 0xE0 0x7E 0xFE 0x9F 0xF8 0x00 0x80 0x00
	0x00 0x00 0x00 0xF8 0x03 0xFC 0x07 0x9E 0x0C 0x0E 0x0C 0x07 0x08 0x0F 0x08 0x1E
	0x04 0x3C 0x00 0x78 0x00 0xF0 0x03 0xC0 0x07 0x00 0x1F 0xE0 0x1B 0xF8 0x00 0x3E
: level-final
	0x00 0x00 0x03 0xFF 0x0B 0xE0 0x0B 0x80 0x03 0x80 0x01 0x8F 0x01 0xFE 0x03 0xF8
	0x05 0xC0 0x00 0xC0 0x02 0xC0 0x00 0x40 0x00 0x60 0x00 0x20 0x00 0xA0 0x00 0x00
	0x00 0x00 0x00 0x70 0x20 0x70 0x00 0x70 0x20 0xF8 0x20 0xFC 0x20 0xFC 0x30 0x6E
	0x30 0x47 0x30 0xC3 0x18 0xC1 0x18 0xC1 0x18 0xC1 0x1C 0x81 0x00 0x80 0x0E 0x00
	0x04 0x00 0x00 0xC0 0x08 0xC0 0x09 0xE0 0x19 0xE0 0x31 0xF0 0x33 0x30 0x73 0x38
	0x66 0x1B 0xC6 0x7E 0xC7 0xFC 0xC7 0x0C 0x8C 0x04 0x08 0x06 0x00 0x02 0x10 0x00
	0x0C 0x00 0x2C 0x00 0x38 0x00 0x38 0x00 0x38 0x00 0x38 0x00 0x38 0x00 0x70 0x00
	0x70 0x00 0x60 0x00 0x60 0x00 0x7C 0x00 0x5F 0xC0 0x01 0xF8 0x00 0x00 0x00 0x00

: level-marker 0x80 0x80 0x80 0x94 0x94 0xC9
: colon        0x00 0x40 0x00 0x40 0x00
: horiz-line   0xFF

to-code

: current-level
	0x02
: decode
	0x00
: decode-tens
	0x00 0x00
: level-times
	# MM : SS : 60ths
	0x00 0x00 0x00
	0x00 0x00 0x00
	0x00 0x00 0x00 
: total-time
	0x00 0x00 0x00

: reset-game
	v0 := 0
	v1 := 0
	v2 := 0
	i := current-level
	save v0
	i := level-times
	save v2
	save v2
	save v2
	save v2
;

: inc-timer
	i := current-level
	load v0
	i := level-times
	i += v0
	i += v0
	i += v0
	load v0 - v2
	v2 += 1
	if v2 == 60 begin
		v2 := 0
		v1 += 1
		if v1 == 60 begin
			v1 := 0
			v0 += 1 
		end
	end
	save v0 - v2
;

: sum-timer
	i := current-level
	load v0
	i := level-times
	i += v0
	i += v0
	i += v0
	load v0 - v2
	i := total-time
	load v3 - v5
	v5 += v2
	if v5 > 59 begin
		v5 -= 60
		v4 += 1
	end
	v4 += v1
	if v4 > 59 begin
		v4 -= 60
		v3 += 1
	end
	v3 += v0
	save v3 - v5
;

: sync-timer
	loop
		vf := delay
		if vf != 0 then
	again
	vf := 4
	delay := vf
	inc-timer
	inc-timer
	inc-timer
	inc-timer
;

: next-level
	i := current-level
	load v0 - v0
	v0 += 1
	save v0 - v0
;

:macro show-time-for Y LEVEL {
	v0 := 36
	v1 := Y
	v2 := LEVEL
	show-time
}
: show-time-digits
	i := decode
	bcd v3
	i := decode-tens
	load v2 - v3
	i := hex v2
	sprite v0 v1 5
	v0 += 5
	i := hex v3
	sprite v0 v1 5
	v0 += 5
;
: show-time
	# x,y in v0,v1
	# level in v2
	if v2 != 3 begin
		i := long level-marker
		sprite v0 v1 6
		v1 += 1
		v2 += 1
		i := hex v2
		v2 -= 1
		v0 += 9
		sprite v0 v1 5
		v0 += 11
	else
		v1 += 1
		v0 += 20
	end
	i := level-times
	i += v2
	i += v2
	i += v2
	load v3 - v5
	show-time-digits
	i := long colon
	sprite v0 v1 5
	v0 += 3
	v3 := v4
	show-time-digits
	i := long colon
	sprite v0 v1 5
	v0 += 3
	v3 := v5
	show-time-digits
	shake
;

: show-score
	plane 1
	i := current-level
	load v0
	i := long level-1
	if v0 == 1 then i := long level-2
	if v0 == 2 then i := long level-final
	v0 := 32
	v1 := 2
	strip-blit
	shake
	short-pause
	show-time-for 20 0
	i := current-level
	load v0
	if v0 != 0 begin
		show-time-for 28 1
	end
	i := current-level
	load v0
	if v0 == 2 begin
		show-time-for 36 2
		short-pause
		short-pause
		i := long horiz-line
		v0 := 53
		v1 := 44
		sprite v0 v1 1
		v0 += 8
		sprite v0 v1 1
		v0 += 8
		sprite v0 v1 1
		v0 += 8
		sprite v0 v1 1
		v0 += 8
		sprite v0 v1 1
		show-time-for 46 3
	end
	jump wait-for-space

###########################################
#
#  Dust Poofs
#
###########################################

to-data

# note: all frames are doubled-up here,
# so you can draw them on either or both planes:

: poof-0 # smallest
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x01 0x80 0x03 0xC0
	0x01 0x80 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x01 0x80 0x03 0xC0
	0x01 0x80 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
: poof-1
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x02 0xC0 0x07 0xC0
	0x07 0x00 0x00 0x40 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x02 0xC0 0x07 0xC0
	0x07 0x00 0x00 0x40 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
: poof-2
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xC0 0x01 0xE0 0x0D 0xD0 0x1F 0xF8 0x1F 0xF8
	0x07 0xF8 0x0B 0xF0 0x03 0x80 0x01 0x20 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xC0 0x01 0xE0 0x0D 0xD0 0x1F 0xF8 0x1F 0xF8
	0x07 0xF8 0x0B 0xF0 0x03 0x80 0x01 0x20 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
: poof-3 # largest
	0x07 0x80 0x6F 0xC8 0xDF 0xE0 0xFF 0xEC 0xFF 0xFE 0xFF 0xFE 0x7F 0xFA 0x7F 0xFE
	0xFF 0xFC 0xFF 0xF9 0x7F 0xFC 0x3F 0xFE 0x7F 0xFE 0x7F 0xEC 0x2F 0xDC 0x1F 0x80
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xC0 0x01 0xE0 0x0D 0xD0 0x1F 0xF8 0x1F 0xF8
	0x07 0xF8 0x0B 0xF0 0x03 0x80 0x01 0x20 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00

: poof-animation
	pointer poof-0
	pointer poof-1
	pointer poof-2
	pointer poof-3
	pointer poof-3
	pointer poof-2
	pointer poof-1
	pointer poof-0

to-code

: dust-prev
	 0 # x in pixels
	 0 # y in pixels
	-1 # frame (or -1 if none)

: dust-draw
	i := long poof-animation
	i += v2
	i += v2
	load ve - vf
	i := poof-lookup
	save ve - vf
	indirect poof-lookup
	sprite v0 v1 0
;

:macro dust-scroll DX DY {
	i := dust-prev
	load v1
	v0 -= DX
	v1 -= DY
	i := dust-prev
	save v1
}

:macro dust-update {
	i := dust-prev
	load v2
	if v2 != -1 begin
		dust-draw
		v2 -= 1
		if v2 != -1 then dust-draw
		i := dust-prev
		save v2
	end
}

###########################################
#
#  Scrolling Background
#
###########################################

to-data

:macro tile-def NAME SYMBOL {
	:calc  NAME   { 16 * CALLS }
	:macro SYMBOL { :byte NAME }
}
: tiles
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 tile-def TILE_NONE      .
: tile-dust-raw
	0x00 0x04 0x40 0x00 0x00 0x10 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 tile-def TILE_DUST      ,
	0x7E 0xC3 0xDB 0x42 0xFF 0xFF 0x76 0x76
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 tile-def TILE_POST      P
	0x18 0x18 0x18 0x10 0x38 0x18 0x18 0x18
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 tile-def TILE_VFENCE    I
	0x18 0xFF 0xFF 0x18 0xFF 0xFF 0x18 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 tile-def TILE_HFENCE    H
	0x00 0xFF 0xFF 0x00 0xFF 0xFF 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 tile-def TILE_HFENCE2   h
: tile-beetles
	0x18 0xA5 0x7E 0xCB 0x4A 0xCB 0x4A 0x3C
	0x00 0x18 0x00 0x34 0x34 0x34 0x34 0x00 tile-def TILE_BUG_UP    U
	0x54 0x3E 0x61 0xBF 0xA1 0x61 0x3E 0x54
	0x00 0x00 0x1E 0x40 0x5E 0x1E 0x00 0x00 tile-def TILE_BUG_LEFT  L
	0x3C 0x52 0xD3 0x52 0xD3 0x7E 0xA5 0x18
	0x00 0x2C 0x2C 0x2C 0x2C 0x00 0x18 0x00 tile-def TILE_BUG_DOWN  D
	0x2A 0x7C 0x86 0x85 0xFD 0x86 0x7C 0x2A
	0x00 0x00 0x78 0x7A 0x02 0x78 0x00 0x00 tile-def TILE_BUG_RIGHT R

: map
	, P H P H H P H P H H H P H H P  H H P H H P H P H H H P H H P ,
	P P . . . . . . P . . . . . . .  . . . . . . . P . . . . . . P P
	I . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . I
	I . . . . . . . P . . . . . . .  . . . . . . . P . . . . . . . I
	P . . . . . . P P H P . . . P H  H P . . . P H P P . . . . . . P
	I . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . I
	I . . . P . . . . . . . . . . .  . . . . . . . . . . . P . . . I
	I . . . I . . . . . . . . . . .  . . . . . . . . . . . I . . . I

	P P . . P H H P . P H H P . . .  . . . P H H P . P H H P . . P P
	I . . . I . . . . . . . . . . .  . . . . . . . . . . . I . . . I
	I . . . P . . . . . . . . . . .  . . . . . . . . . . . P . . . I
	I . . . . . . . . . . . P H H H  H H H P . . . . . . . . . . . I
	P . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . P
	I . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . I
	I . . . . . . . . . . . P . . .  . . . P . . . . . . . . . . . I
	I . . . . . . . . . . . I . . .  . . . I . . . . . . . . . . . I

	P . . P H H P . . P H H P . . .  . . . P H H P . . P H H P . . P
	I . . . . . . . . . . . P . . .  . . . P . . . . . . . . . . . I
	I . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . I
	I . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . I
	P . . . . . . . . . . . P H H H  P H H P . . . . . . . . . . . P
	I . . . P . . . . . . . . . . .  . . . . . . . . . . . P . . . I
	I . . . I . . . . . . . . . . .  . . . . . . . . . . . I . . . I
	P P . . P H H P . P H H P . . .  . . . P H H P . P H H P . . P P

	I . . . I . . . . . . . . . . .  . . . . . . . . . . . I . . . I
	I . . . P . . . . . . . . . . .  . . . . . . . . . . . P . . . I
	I . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . I
	I . . . . . . P P P . . . . P H  H P . . . . P P P . . . . . . I
	P . . . . . . . P . . . . . . .  . . . . . . . P . . . . . . . P
	I . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . I
	P P . . . . . . P . . . . . . .  . . . . . . . P . . . . . . P P
	, P H P H H P H P H H H P H H P  H H P H H P H H P H H P H H P ,

:calc TSIZE        {  8 } # 8x8 tiles
:calc HSIZE        { 16 }
:calc VSIZE        {  8 }
:calc MAP_COLS     { HSIZE * 2 }
:calc MAP_ROWS     { VSIZE * 4 }
:calc MAP_STRIDE   { MAP_COLS - HSIZE }
:calc MAX_X_OFFSET { MAP_COLS - HSIZE }
:calc MAX_Y_OFFSET { MAP_ROWS - VSIZE }

to-code

: map-window
	unpack map
	v1 += map-offset-x
	v0 += vf
	v2 := 0        # loop count
	v3 := MAP_COLS # multiplicand
	loop
		if v2 == map-offset-y then return
		v1 += v3
		v0 += vf
		v2 += 1
	again

: map-init
	clear
	map-window
	i := map-base
	save v1
	v1 := 0 # source offset
	v3 := 0 # horiz pixels
	v4 := 0 # vert pixels
	loop
		indirect map-base
		i += v1
		load v0
		i := long tiles
		i += v0
		sprite v3 v4 TSIZE
		v1 += 1
		v3 += TSIZE
		if v3 == 128 then v4 += TSIZE
		if v3 == 128 then v1 += MAP_STRIDE
		if v3 == 128 then v3 := 0
		if v4 ==  64 then return
	again

: map-scroll-left
	if map-offset-x == 0 then return
	dust-scroll -8 0
	map-offset-x -= 1
	map-window
	i := scroll-horiz-base
	save v1
	v1 := 0 # source offset
	v3 := 0 # horiz pixels
	scroll-right
	scroll-right
	: scroll-horiz-body
	v4 := 0 # vert pixels
	loop
		indirect scroll-horiz-base
		i += v1
		load v0
		i := long tiles
		i += v0
		sprite v3 v4 TSIZE
		v1 += MAP_COLS
		v4 += TSIZE
		if v4 == 64 then return
	again

: map-scroll-right
	if map-offset-x == MAX_X_OFFSET then return
	dust-scroll 8 0
	map-offset-x += 1
	map-window
	i := scroll-horiz-base
	save v1
	v1 :=  15 # source offset
	v3 := 120 # horiz pixels
	scroll-left
	scroll-left
	jump scroll-horiz-body

: map-scroll-up
	if map-offset-y == 0 then return
	dust-scroll 0 -8
	map-offset-y -= 1
	map-window
	i := scroll-vert-base
	save v1
	v1 := 0 # source offset
	v4 := 0 # vert pixels
	scroll-down 8
	: scroll-vert-body
	v3 := 0 # horiz pixels
	loop
		indirect scroll-vert-base
		i += v1
		load v0
		i := long tiles
		i += v0
		sprite v3 v4 TSIZE
		v1 += 1
		v3 += 8
		if v3 == 128 then return
	again

: map-scroll-down
	if map-offset-y == MAX_Y_OFFSET then return
	dust-scroll 0 8
	map-offset-y += 1
	map-window
	i := scroll-vert-base
	save v1
	:calc LAST_ROW_OFFSET { ( MAP_COLS ) * VSIZE - 1 }
	v1 := LAST_ROW_OFFSET
	v4 := 56
	scroll-up 8
	jump scroll-vert-body

###########################################
#
#  Beetles
#
###########################################

to-data

:const BEETLE_SIZE 3
:const BEETLE_MAX  8
:macro beetle-body X Y D {
	X # x, in tiles
	Y # y, in tiles
	D # dir or -1 if not present
}
: beetle-count
	0
: beetle-state
	beetle-body 3 3  0
	beetle-body 5 5  1
	beetle-body 6 6  2
	beetle-body 0 0 -1
	beetle-body 0 0 -1
	beetle-body 0 0 -1
	beetle-body 0 0 -1
	beetle-body 0 0 -1

: level-1-beetles
	12 12  1
	19 12  3
	12 19  1
	19 19  3
	 0  0 -1
	 0  0 -1
	 0  0 -1
	 0  0 -1

: level-2-beetles
	12 12  1
	19 12  3
	12 19  1
	19 19  3
	 7 16  0
	24 16  2
	 0  0 -1
	 0  0 -1

: level-3-beetles
	12 12  1
	19 12  3
	12 19  1
	19 19  3
	 3  3  3
	28  3  2
	28 28  1
	 3 28  0

: beetle-pop
	0x88 0x46 0x40 0x90 0x01 0x32 0x4A 0x01

to-code

:alias beetle-index  ve
:alias beetle-dir    v5
:alias beetle-tile-y v4
:alias beetle-tile-x v3

: beetle-pos
	# load v0, v1, v2 with the next
	# frame's x, y, and frame offset (or -1 if the beetle is offscreen)
	v2 := beetle-dir
	v2 += v2 # *2
	v2 += v2 # *4
	v2 += v2 # *8
	v2 += v2 # *16
	v0 := beetle-tile-x
	v0 -= map-offset-x
	if v0 >= HSIZE then v2 := -1
	v0 += v0 # *2
	v0 += v0 # *4
	v0 += v0 # *8
	v1 := beetle-tile-y
	v1 -= map-offset-y
	if v1 >= VSIZE then v2 := -1
	v1 += v1 # *2
	v1 += v1 # *4
	v1 += v1 # *8
;

: beetle-tile-addr
	unpack map
	v2 := beetle-tile-x
	v1 += v2
	v0 += vf
	v2 := beetle-tile-y
	loop
		while v2 != 0
		vf := MAP_COLS # multiplicand
		v1 += vf
		v0 += vf
		v2 -= 1
	again
;

: beetle-tile
	beetle-tile-addr
	i := beetle-tile-slot
	save v1
	indirect beetle-tile-slot
;

: beetle-blocked
	v0 := TILE_POST
	return

: beetle-probe
	# player collision
	i := long dir-deltas
	i += beetle-dir
	i += beetle-dir
	load v1
	v0 += beetle-tile-x
	v1 += beetle-tile-y
	if v0 == player-x begin
		if v1 == player-y then jump beetle-blocked
		v1 -= 1
		if v1 == player-y then jump beetle-blocked
		v1 += 1
	end
	v0 -= 1
	if v0 == player-x begin
		if v1 == player-y then jump beetle-blocked
		v1 -= 1
		if v1 == player-y then jump beetle-blocked
	end

	# map collision
	beetle-tile-addr
	if beetle-dir == 0 begin # up
		vf := MAP_COLS
		v1 -= vf
		if vf == 0 then v0 -= 1
	end
	if beetle-dir == 2 begin # down
		vf := MAP_COLS
		v1 += vf
		v0 += vf
	end
	if beetle-dir == 1 then v1 -= 1 # left
	if beetle-dir == 3 then v1 += 1 # east
	i := beetle-probe-slot
	save v1
	indirect beetle-probe-slot
	load v0
;

: beetle-get
	i := long beetle-state
	i += beetle-index
	i += beetle-index
	i += beetle-index
	load v3 - v5
;

: beetle-set
	i := long beetle-state
	i += beetle-index
	i += beetle-index
	i += beetle-index
	save v3 - v5
;

: beetle-dir-tile
	v0 := beetle-dir
	v0 += v0 # *2
	v0 += v0 # *4
	v0 += v0 # *8
	v0 += v0 # *16
	v0 += TILE_BUG_UP
;

: beetle-draw
	if v2 == -1 then return
	i := long tile-beetles
	i += v2
	sprite v0 v1 8
;

: beetle-erase
	beetle-pos
	beetle-draw
	beetle-tile
	v0 := TILE_NONE
	save v0
;
: beetle-redraw
	beetle-pos
	beetle-draw
	beetle-tile
	beetle-dir-tile
	save v0 - v0
;

: beetle-brain
	v0 := random 0b11
	if v0 == 0 begin
		beetle-probe
		if v0 == TILE_NONE begin
			beetle-erase
			i := long dir-deltas
			i += beetle-dir
			i += beetle-dir
			load v1
			beetle-tile-x += v0
			beetle-tile-y += v1
			beetle-redraw
		end
		return
	end
	if v0 == 1 begin
		beetle-erase
		beetle-dir += 1
		if beetle-dir == 4 then beetle-dir := 0
		beetle-redraw
		return
	end
	if v0 == 2 begin
		beetle-erase
		beetle-dir -= 1
		if beetle-dir == -1 then beetle-dir := 3
		beetle-redraw
		return
	end
;

:macro beetles-init {
	# copy from init table
	v3 := 0 # beetle count
	i := current-level
	load v2 - v2
	unpack level-1-beetles
	if v2 == 1 begin
		unpack level-2-beetles
	end
	if v2 == 2 begin
		unpack level-3-beetles
	end
	i := beetle-source
	save v1
	beetle-index := 0
	loop
		indirect beetle-source
		i += beetle-index
		i += beetle-index
		i += beetle-index
		load v2
		i := long beetle-state
		i += beetle-index
		i += beetle-index
		i += beetle-index
		save v2
		if v2 != -1 then v3 += 1
		beetle-index += 1
		if beetle-index != BEETLE_MAX then
	again
	i := long beetle-count
	v0 := v3
	save v0

	# initial drawing
	beetle-index := 0
	loop
		beetle-get
		if beetle-dir != -1 begin
			beetle-tile
			beetle-dir-tile
			save v0 - v0
		end
		beetle-index += 1
		if beetle-index != BEETLE_MAX then
	again
}

:macro beetles-update {
	beetle-index := 0
	loop
		beetle-get
		if beetle-dir != -1 begin
			beetle-brain
			beetle-set
		end
		beetle-index += 1
		if beetle-index != BEETLE_MAX then
	again
}

###########################################
#
#  Player Movement / Rendering
#
###########################################

to-data

: chicken-up-hop
	0x01 0xC0 0x02 0x20 0x06 0x70 0x1D 0xB0 0x30 0x1C 0x60 0x06 0x49 0x12 0x78 0x1E
	0x58 0x1A 0x1E 0x78 0x1F 0xF8 0x37 0xEC 0x60 0x06 0x50 0x0A 0x00 0x00 0x00 0x00
	0x00 0x00 0x01 0xC0 0x01 0x80 0x02 0x40 0x0F 0xE0 0x1F 0xF8 0x36 0xEC 0x07 0xE0
	0x07 0xE0 0x01 0x80 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
: chicken-up-stand
	0x01 0xC0 0x02 0x20 0x0F 0x30 0x09 0x40 0x10 0xB0 0x10 0x10 0x20 0x08 0x21 0x04
	0x28 0x14 0x3C 0x3C 0x1F 0xF8 0x1F 0xF8 0x07 0xE0 0x04 0x20 0x0E 0x70 0x14 0x28
	0x00 0x00 0x01 0xC0 0x00 0xC0 0x06 0x80 0x0F 0x40 0x0F 0xE0 0x1F 0xF0 0x1E 0xF8
	0x17 0xE8 0x03 0xC0 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
: chicken-up-sit
	0x00 0x00 0x01 0xC0 0x02 0x20 0x07 0xB0 0x04 0xC0 0x08 0x30 0x10 0x08 0x10 0x08
	0x21 0x04 0x28 0x14 0x3C 0x3C 0x1F 0xF8 0x1F 0xF8 0x07 0xE0 0x0E 0x70 0x14 0x28
	0x00 0x00 0x00 0x00 0x01 0xC0 0x00 0x40 0x03 0x00 0x07 0xC0 0x0F 0xF0 0x0F 0xF0
	0x1E 0xF8 0x17 0xE8 0x03 0xC0 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
: chicken-up-peck
	0x03 0x80 0x02 0x40 0x02 0x40 0x04 0x20 0x08 0x30 0x10 0x08 0x11 0x08 0x28 0x14
	0x28 0x14 0x3C 0x3C 0x1F 0xF8 0x1F 0xF8 0x07 0xE0 0x06 0xE0 0x0E 0x70 0x14 0x28
	0x00 0x00 0x01 0x80 0x01 0x80 0x03 0xC0 0x07 0xC0 0x0F 0xF0 0x0E 0xF0 0x17 0xE8
	0x17 0xE8 0x03 0xC0 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00

: chicken-left-hop
	0x1E 0x00 0x21 0x00 0x73 0x00 0x10 0xE7 0x20 0x19 0x24 0x0A 0x48 0x14 0x46 0x1C
	0x63 0xF8 0x3C 0x38 0x1F 0xF0 0x3B 0xFA 0x60 0x06 0x20 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x1E 0x00 0x0C 0x00 0x0F 0x00 0x1F 0xE6 0x1B 0xF4 0x37 0xE8 0x39 0xE0
	0x1C 0x00 0x03 0xC0 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
: chicken-left-stand
	0x1E 0x00 0x21 0x00 0x73 0x00 0x09 0x02 0x19 0x86 0x20 0x7A 0x24 0x02 0x48 0x74
	0x48 0x1C 0x68 0x18 0x3C 0x78 0x1F 0xF0 0x07 0xE0 0x04 0x20 0x0E 0x70 0x14 0xA0
	0x00 0x00 0x1E 0x00 0x0C 0x00 0x06 0x00 0x06 0x00 0x1F 0x84 0x1B 0xFC 0x37 0x88
	0x37 0xE0 0x17 0xE0 0x03 0x80 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
: chicken-left-sit
	0x00 0x00 0x1E 0x00 0x21 0x00 0x73 0x04 0x09 0x06 0x19 0x8A 0x20 0x7A 0x24 0x02
	0x48 0x74 0x48 0x1C 0x68 0x18 0x3C 0x78 0x1F 0xF0 0x07 0xE0 0x0E 0x70 0x14 0xA0
	0x00 0x00 0x00 0x00 0x1E 0x00 0x0C 0x00 0x06 0x00 0x06 0x04 0x1F 0x84 0x1B 0xFC
	0x37 0x88 0x37 0xE0 0x17 0xE0 0x03 0x80 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
: chicken-left-peck
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x08 0x0F 0x8C 0x10 0x6A 0x20 0x19 0x22 0x01
	0x26 0x1A 0x44 0x0E 0x44 0x0C 0xAF 0x3C 0x97 0xF8 0x97 0xE0 0x6E 0x70 0x34 0xA0
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x0F 0x84 0x1F 0xE6 0x1D 0xFE
	0x19 0xE4 0x3B 0xF0 0x3B 0xF0 0x50 0xC0 0x60 0x00 0x60 0x00 0x00 0x00 0x00 0x00

: chicken-down-hop
	0x03 0xC0 0x04 0x20 0x0F 0x60 0x1B 0x3C 0x2C 0x02 0x40 0x02 0x58 0x19 0x68 0x17
	0x10 0x08 0x1C 0x38 0x0F 0xF0 0x77 0xEE 0x10 0x08 0x20 0x04 0x00 0x00 0x00 0x00
	0x00 0x00 0x03 0xC0 0x00 0x80 0x04 0xC0 0x13 0xFC 0x3F 0xFC 0x27 0xE6 0x07 0xE0
	0x0F 0xF0 0x03 0xC0 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
: chicken-down-stand
	0x03 0xC0 0x04 0x20 0x07 0x60 0x0F 0x20 0x02 0x30 0x0C 0x08 0x10 0x04 0x28 0x14
	0x28 0x14 0x28 0x14 0x3C 0x3C 0x0F 0xF0 0x07 0xE0 0x0C 0x30 0x04 0x20 0x0A 0x50
	0x00 0x00 0x03 0xC0 0x00 0x80 0x00 0xC0 0x01 0xC0 0x03 0xF0 0x0F 0xF8 0x17 0xE8
	0x17 0xE8 0x17 0xE8 0x03 0xC0 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
: chicken-down-sit
	0x00 0x00 0x03 0xC0 0x04 0x20 0x07 0x60 0x0F 0x20 0x02 0x30 0x0C 0x08 0x10 0x04
	0x28 0x14 0x28 0x14 0x28 0x14 0x3C 0x3C 0x0F 0xF0 0x0F 0xF0 0x04 0x20 0x0A 0x50
	0x00 0x00 0x00 0x00 0x03 0xC0 0x00 0x80 0x00 0xC0 0x01 0xC0 0x03 0xF0 0x0F 0xF8
	0x17 0xE8 0x17 0xE8 0x17 0xE8 0x03 0xC0 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
: chicken-down-peck
	0x00 0x00 0x00 0x00 0x01 0x80 0x02 0x40 0x02 0x40 0x07 0xE0 0x0C 0x30 0x14 0x08
	0x24 0x24 0x28 0x34 0x28 0x54 0x28 0xD4 0x1C 0x78 0x0E 0xF0 0x05 0x20 0x0A 0x50
	0x00 0x00 0x00 0x00 0x00 0x00 0x01 0x80 0x01 0x80 0x00 0x00 0x03 0xC0 0x0B 0xF0
	0x1B 0xD8 0x17 0xC8 0x17 0xA8 0x17 0x28 0x03 0x80 0x01 0x00 0x00 0x00 0x00 0x00

: chicken-right-hop
	0x00 0x78 0x00 0x84 0x00 0xCE 0xE7 0x08 0x98 0x04 0x50 0x24 0x28 0x12 0x38 0x62
	0x1F 0xC6 0x1C 0x3C 0x0F 0xF8 0x5F 0xDC 0x60 0x06 0x00 0x04 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x78 0x00 0x30 0x00 0xF0 0x67 0xF8 0x2F 0xD8 0x17 0xEC 0x07 0x9C
	0x00 0x38 0x03 0xC0 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
: chicken-right-stand
	0x00 0x78 0x00 0x84 0x00 0xCE 0x40 0x90 0x61 0x98 0x5E 0x04 0x40 0x24 0x2E 0x12
	0x38 0x12 0x18 0x16 0x1E 0x3C 0x0F 0xF8 0x07 0xE0 0x04 0x20 0x0E 0x70 0x05 0x28
	0x00 0x00 0x00 0x78 0x00 0x30 0x00 0x60 0x00 0x60 0x21 0xF8 0x3F 0xD8 0x11 0xEC
	0x07 0xEC 0x07 0xE8 0x01 0xC0 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
: chicken-right-sit
	0x00 0x00 0x00 0x78 0x00 0x84 0x20 0xCE 0x60 0x90 0x51 0x98 0x5E 0x04 0x40 0x24
	0x2E 0x12 0x38 0x12 0x18 0x16 0x1E 0x3C 0x0F 0xF8 0x07 0xE0 0x0E 0x70 0x05 0x28
	0x00 0x00 0x00 0x00 0x00 0x78 0x00 0x30 0x00 0x60 0x20 0x60 0x21 0xF8 0x3F 0xD8
	0x11 0xEC 0x07 0xEC 0x07 0xE8 0x01 0xC0 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
: chicken-right-peck
	0x00 0x00 0x00 0x00 0x00 0x00 0x10 0x00 0x31 0xF0 0x56 0x08 0x98 0x04 0x80 0x44
	0x58 0x64 0x70 0x22 0x30 0x22 0x3C 0xF5 0x1F 0xE9 0x07 0xE9 0x0E 0x76 0x05 0x2C
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x21 0xF0 0x67 0xF8 0x7F 0xB8
	0x27 0x98 0x0F 0xDC 0x0F 0xDC 0x03 0x0A 0x00 0x06 0x00 0x06 0x00 0x00 0x00 0x00

: chicken-squawk
	0x5C 0x00 0x0F 0x00 0xB0 0x80 0x0A 0x80 0x08 0x81 0x08 0xC3 0x10 0x3D 0x12 0x01
	0x24 0x3A 0x24 0x0E 0x34 0x0C 0x1E 0x3C 0x0F 0xF8 0x03 0xF0 0x07 0x38 0x0A 0x50
	0x00 0x00 0x00 0x00 0x0F 0x00 0x05 0x00 0x07 0x00 0x07 0x00 0x0F 0xC2 0x0D 0xFE
	0x1B 0xC4 0x1B 0xF0 0x0B 0xF0 0x01 0xC0 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00

: chicken-frames
	pointer chicken-up-hop
	pointer chicken-up-stand
	pointer chicken-up-sit
	pointer chicken-up-peck

	pointer chicken-left-hop
	pointer chicken-left-stand
	pointer chicken-left-sit
	pointer chicken-left-peck

	pointer chicken-down-hop
	pointer chicken-down-stand
	pointer chicken-down-sit
	pointer chicken-down-peck

	pointer chicken-right-hop
	pointer chicken-right-stand
	pointer chicken-right-sit
	pointer chicken-right-peck

: ring-small
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x01 0x00 0x01 0x00 0x01 0x00 0x03
	0x00 0x03 0x00 0x03 0x00 0x01 0x00 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x03 0x00 0x07 0x00 0x3C 0x00 0xF8 0x01 0xE0 0x07 0xE0
	0x0F 0x00 0x38 0x00 0x70 0x00 0xE0 0x00 0xC0 0x00 0xC0 0x00 0x80 0x00 0x80 0x00
	0x80 0x00 0x80 0x00 0xC0 0x00 0xC0 0x00 0xE0 0x00 0xE0 0x00 0x70 0x00 0x78 0x00
	0x7E 0x00 0x37 0x00 0x1B 0xC0 0x1D 0xFE 0x0F 0xFF 0x00 0x01 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x07 0xFF 0x7F 0xFF 0xE0 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xE0 0x00 0xFE 0x00 0x3F 0x80 0x03 0xFF
	0x00 0x3F 0x00 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0xFF 0xFC 0xFF 0xFF 0x00 0x3F 0x00 0x0E 0x00 0x01 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x0F 0x00 0x78 0x01 0xFF 0x0F 0xF8 0xFE 0x00
	0x38 0x00 0xC0 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0xE0 0x00 0x70 0x00 0xDC 0x00 0x77 0x00 0x0D 0x80 0x03 0xE0
	0x00 0xF8 0x00 0x3E 0x00 0x0F 0x00 0x07 0x00 0x03 0x00 0x03 0x00 0x01 0x00 0x01
	0x00 0x03 0x00 0x03 0x00 0x03 0x00 0x06 0x00 0x06 0x00 0x04 0x00 0x0C 0x00 0x1C
	0x00 0x78 0x00 0xF0 0x07 0x60 0xFF 0x80 0xF0 0x00 0x80 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x80 0x00 0xC0 0x00 0x40 0x00 0x40 0x00 0x80 0x00 0x80 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
: ring-med
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x01 0x00 0x01 0x00 0x01
	0x00 0x01 0x00 0x01 0x00 0x01 0x00 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x03
	0x00 0x0F 0x00 0x3E 0x07 0xF0 0x0C 0x80 0x1B 0x00 0x14 0x00 0x28 0x00 0x28 0x00
	0x30 0x00 0x60 0x00 0x60 0x00 0xC0 0x00 0xC0 0x00 0x80 0x00 0x80 0x00 0x80 0x00
	0x80 0x00 0x80 0x00 0x80 0x00 0xC0 0x00 0xC0 0x00 0x60 0x00 0x30 0x00 0x18 0x00
	0x0E 0x00 0x0B 0x00 0x04 0x80 0x03 0xC0 0x00 0xC0 0x00 0x60 0x00 0x30 0x00 0x1C
	0x00 0x0F 0x00 0x03 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x3F 0x01 0xDF 0x03 0xE0 0x07 0x00 0x38 0x00 0xD0 0x00 0x70 0x00
	0xC0 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0xC0 0x00 0xF8 0x00 0x3F 0xF0 0x00 0xFC 0x00 0x1F 0x00 0x01 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x07 0x00 0x7C
	0xFF 0xFF 0xFE 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFE 0x00 0x71 0xFF
	0x1E 0x1F 0x03 0xF0 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x80 0x00 0xF8 0xF8
	0xFF 0x87 0x00 0xFF 0x00 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x1F 0x00 0xFF 0xFF 0x80
	0x80 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0xC0 0x00 0x70 0x00 0xFC 0x00 0x0F 0xC0 0x00 0xE0 0x00 0x7C 0x00 0x7F 0x00 0x07
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x03 0x00 0x1F 0x00 0xE6 0x07 0x1C 0xF8 0xE0 0x7F 0x80 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xC0 0x00
	0xF8 0x00 0x3C 0x00 0x1A 0x00 0x0D 0x00 0x07 0xC0 0x00 0xE0 0x00 0x38 0x00 0x1C
	0x00 0x0A 0x00 0x05 0x00 0x05 0x00 0x02 0x00 0x02 0x00 0x03 0x00 0x03 0x00 0x03
	0x00 0x03 0x00 0x03 0x00 0x03 0x00 0x02 0x00 0x03 0x00 0x05 0x00 0x05 0x00 0x09
	0x00 0x13 0x00 0x1E 0x00 0x30 0x00 0xE0 0x03 0x00 0x0E 0x00 0x1C 0x00 0x30 0x00
	0xE0 0x00 0xC0 0x00 0x80 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x80 0x00 0x80 0x00 0x80 0x00 0x80 0x00 0x40 0x00 0x40 0x00
	0xC0 0x00 0x80 0x00 0x80 0x00 0x80 0x00 0x80 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
: ring-large
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x01 0x00 0x06 0x00 0x09 0x00 0x17 0x00 0x3C 0x00 0x70 0x00 0x60 0x00 0x40
	0x00 0xC0 0x01 0xC0 0x03 0x80 0x01 0x80 0x3F 0x00 0x3C 0x00 0xF0 0x00 0xE0 0x00
	0xC0 0x00 0xC0 0x00 0x80 0x00 0x80 0x00 0x80 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x80 0x00 0x80 0x00 0xC0 0x00 0xC0 0x00 0xE0 0x00 0xF0 0x00 0xF0 0x00 0x60 0x00
	0x50 0x00 0x38 0x00 0x18 0x00 0x16 0x00 0x0B 0x00 0x06 0x00 0x02 0x00 0x03 0x00
	0x02 0x80 0x03 0x60 0x01 0x10 0x00 0xCC 0x00 0x7F 0x00 0x01 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x07 0x01 0xFF 0x07 0xE0 0x1E 0x00
	0xF8 0x00 0x60 0x00 0xE0 0x00 0x80 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xC0 0x00 0xE0 0x00 0x78 0x00 0x1C 0x00
	0x07 0xF0 0x01 0xDE 0x00 0x3B 0x00 0x07 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x03 0xFF 0x0E 0xF8 0x1F 0xF0 0xF6 0x00 0x78 0x00 0xE0 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x80 0x00 0xC0 0x00 0xF8 0x00 0x1F 0x00 0x0C 0xFF 0x07 0xF7
	0xF8 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xC0 0x00 0xFE 0x00
	0x00 0x1F 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x1F
	0xE7 0xE0 0x1F 0x38 0x00 0xFE 0x00 0x07 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x03 0x00 0x06 0x00 0x3F 0x00 0xF8 0x1F 0x80 0xFC 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0xC0 0x00 0xE0 0x00 0x1C 0x00 0x07 0x80 0x03 0xE0
	0x00 0xD8 0x00 0x3E 0x00 0x0F 0x00 0x03 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x01 0x00 0x07 0x00 0x1E
	0x00 0xF0 0xFF 0x80 0x9C 0x00 0xE0 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x80 0x00 0xC0 0x00 0xF8 0x00 0x1F 0x80 0x0E 0xC0 0x0F 0x60
	0x07 0x90 0x01 0xD8 0x00 0xE8 0x00 0x78 0x00 0x6C 0x00 0x3C 0x00 0x14 0x00 0x1E
	0x00 0x0E 0x00 0x0F 0x00 0x07 0x00 0x07 0x00 0x07 0x00 0x07 0x00 0x07 0x00 0x05
	0x00 0x05 0x00 0x05 0x00 0x05 0x00 0x05 0x00 0x0F 0x00 0x0F 0x00 0x1B 0x00 0x3E
	0x00 0x3E 0x00 0x5C 0x00 0xE8 0x01 0xE8 0x01 0xF0 0x03 0xE0 0x07 0xC0 0x06 0x80
	0x0B 0x00 0x0E 0x00 0x1C 0x00 0x38 0x00 0x58 0x00 0xB0 0x00 0xE0 0x00 0x00 0x00
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00

: marker
	0x83 0x66 0x3C 0x18 0x7C 0xE6 0xC3 0x83

: dir-deltas
	# frame 0
	 0 -1
	-1  0
	 0  1
	 1  0
	# frame 1
	 0 -2
	-2  0
	 0  2
	 2  0
	# frame 2
	 0 -6
	-6  0
	 0  6
	 6  0
	# frame 3
	 0 -7
	-7  0
	 0  7
	 7  0

: dir-deltas-half
	 0 -3
	-3  0
	 0  3
	 3  0

: dir-probes
	 0 -1  1 -1 # up
	-1  0 -1  1 # left
	 0  2  1  2 # down
	 2  0  2  1 # right

: dir-keys
	:byte OCTO_KEY_W
	:byte OCTO_KEY_A
	:byte OCTO_KEY_S
	:byte OCTO_KEY_D

to-code

: player-prev
	0 # x in pixels
	0 # y in pixels
	0 # frame offset

: player-pos
	# load v0, v1, v2 with the next
	# frame's x, y, and frame index
	v0 := player-x
	v0 -= map-offset-x
	v0 += v0 # *2
	v0 += v0 # *4
	v0 += v0 # *8
	v1 := player-y
	v1 -= map-offset-y
	v1 += v1 # *2
	v1 += v1 # *4
	v1 += v1 # *8
	v2 := player-dir
	v2 += v2 # *2
	v2 += v2 # *4
	if player-state == STATE_IDLE begin
		v2 += 1 # standing position
		if player-timer > 4 then v2 += 1 # bob sitting
	end
	if player-state == STATE_BUMP then jump bump-or-walk
	if player-state == STATE_WALK begin
		: bump-or-walk
		i := long dir-deltas
		# (timer * 8) + (dir * 2)
		ve := player-timer
		ve += ve
		ve += ve
		ve += ve
		i  += ve
		i  += player-dir
		i  += player-dir
		load ve - ve
		v0 += ve
		vf := 1
		i  += vf
		load ve - ve
		v1 += ve
	end
	if player-state == STATE_RUN begin
		i := long dir-deltas-half
		i += player-dir
		i += player-dir
		load ve - ve
		v0 += ve
		if player-timer == 1 then v0 += ve
		vf := 1
		i  += vf
		load ve - ve
		v1 += ve
		if player-timer == 1 then v1 += ve
		if player-timer == 1 then v2 += 1 # bob running
	end
	if player-state == STATE_PECK begin
		v2 += 3 # pecking
	end
	v2 += v2 # pointers are 2 bytes wide
;

: player-draw
	i := long chicken-frames
	i += v2
	load ve - vf
	i := chicken-source
	save ve - vf
	indirect chicken-source
	sprite v0 v1 0
;

: player-probe
	# probe offsets:
	i += v0
	load v2 - v3
	unpack map
	v2 += player-x
	v1 += v2
	v0 += vf
	v3 += player-y # goal y
	ve := MAP_COLS # multiplicand
	loop
		while v3 != 0
		v1 += ve
		v0 += vf
		v3 -= 1
	again
	i := map-probe
	save v1
	indirect map-probe
	load v0
;

: player-bump
	player-timer := 0
	player-state := STATE_BUMP
;

: player-walk
	:macro probe-base {
		i := long dir-probes
		v0 := player-dir
		v0 += v0 # *2
		v0 += v0 # *4
	}
	probe-base
	player-probe
	if v0 != TILE_NONE then jump player-bump

	probe-base
	v0 += 2
	player-probe
	if v0 != TILE_NONE then jump player-bump
	
	# OK, this direction is clear:
	player-timer := 0
	player-state := STATE_WALK
	sfx sound-scratch
;

: player-run
	probe-base
	player-probe
	if v0 != TILE_NONE then jump player-bump

	probe-base
	v0 += 2
	player-probe
	if v0 != TILE_NONE then jump player-bump
	
	# OK, this direction is clear:
	player-timer := 0
	player-state := STATE_RUN
	sfx sound-scratch
;

: player-peck
	probe-base
	player-probe
	v1 := 0
	if v0 >= TILE_BUG_UP then jump player-got-bug

	probe-base
	v0 += 2
	player-probe
	v1 := 2
	if v0 >= TILE_BUG_UP then jump player-got-bug

	sfx sound-miss
;

: the-bug
	0x00

: player-got-bug
	sfx sound-hit

	# get the coordinates of the bug we pecked:
	i  := long dir-probes
	v0 := player-dir
	v0 += v0 # *2
	v0 += v0 # *4
	i  += v0
	i  += v1
	load v1
	#:breakpoint go-offsets
	v0 += player-x
	v1 += player-y
	#:breakpoint bug-pos

	# find the bug's index:
	beetle-index := 0
	loop
		beetle-get
		if beetle-dir != -1 begin
			#:breakpoint consider-beetle
			if v0 == beetle-tile-x begin
				if v1 == beetle-tile-y begin
					# erase it and remove it from the map
					beetle-erase

					# spawn a poof where the beetle was killed
					beetle-pos
					if v2 != -1 begin
						v0 -= 4
						v1 -= 4
						v2 := 3
						i  := dust-prev
						save v2
						i := the-bug
						save beetle-index - beetle-index
						dust-draw
						i := the-bug
						load beetle-index - beetle-index
					end

					# remove it from the table
					beetle-dir := -1
					beetle-set

					# decrement the number of existing beetles
					i := long beetle-count
					load v0 - v0
					v0 -= 1
					save v0 - v0

					#:breakpoint got-a-bug
					return
				end
			end
		end
		beetle-index += 1
		if beetle-index != BEETLE_MAX then
	again
	:breakpoint beetle-not-found # this shouldn't happen!
;

: beetle-locate
	beetle-get
	beetle-pos
	if beetle-dir == -1 then return # ignore dead beetles
	beetle-pos
	if v2 != -1 then return # ignore onscreen beetles
	if beetle-tile-x < map-offset-x begin
		v0 := 0 # left edge
	else
		beetle-tile-x -= map-offset-x
		if beetle-tile-x >= HSIZE then v0 := 120 # right edge
	end
	if beetle-tile-y < map-offset-y begin
		v1 := 0 # top edge
	else
		beetle-tile-y -= map-offset-y
		if beetle-tile-y >= VSIZE then v1 := 56  # bottom edge
	end
	i := long marker
	plane 2
	sprite v0 v1 8
	plane 3
;
: beetles-locate
	beetle-index := 0
	loop
		beetle-locate
		beetle-index += 1
		if beetle-index != BEETLE_MAX then
	again
;
: player-locate
	# highlight any offscreen bugs...
	player-pos
	i := long chicken-squawk
	sprite v0 v1 0
	sfx sound-rumble
	beetles-locate
	plane 2
	i := long ring-small screen-blit
	sync-timer
	i := long ring-med screen-blit
	sync-timer
	i := long ring-small screen-blit
	i := long ring-large screen-blit
	sync-timer
	i := long ring-med screen-blit
	sync-timer
	i := long ring-large screen-blit
	sync
	plane 3
	beetles-locate
	player-pos
	i := long chicken-squawk
	sprite v0 v1 0
;

: player-actually-move
	i := long dir-deltas
	i += player-dir
	i += player-dir
	load v1
	player-x += v0
	player-y += v1
	v0 := player-x
	v0 -= map-offset-x
	if v0 < 4 then map-scroll-left
	v0 := player-x
	v0 -= map-offset-x
	if v0 > 11 then map-scroll-right
	v0 := player-y
	v0 -= map-offset-y
	if v0 < 2 then map-scroll-up
	v0 := player-y
	v0 -= map-offset-y
	if v0 > 4 then map-scroll-down
;

:macro player-init {
	player-pos
	i := player-prev
	save v2
	player-draw
}

:macro player-update {
	i := player-prev
	load v2
	player-draw

	player-timer += 1
	vf := 0b111 # mod 8
	player-timer &= vf

	if player-state == STATE_IDLE begin
		:macro move-dir KEY DIR {
			vf := KEY
			if vf key begin
				if player-dir == DIR then player-walk
				player-dir := DIR
			end
		}
		move-dir OCTO_KEY_W DIR_UP
		move-dir OCTO_KEY_A DIR_LEFT
		move-dir OCTO_KEY_S DIR_DOWN
		move-dir OCTO_KEY_D DIR_RIGHT
		vf := OCTO_KEY_E
		if vf key begin
			player-timer := 0
			player-state := STATE_PECK
			player-peck
		end
		vf := OCTO_KEY_Q
		if vf key then player-locate
		jump player-states-done
	end
	if player-state == STATE_WALK begin
		if player-timer == 3 begin
			player-pos
			i := dust-prev
			save v1
			player-actually-move
			player-state := STATE_IDLE
			i := long dir-keys
			i += player-dir
			load vf - vf
			if vf key begin
				player-run
				if player-state == STATE_RUN begin
					i := dust-prev
					load v1
					v2 := 3
					i := dust-prev
					save v2
					dust-draw
					sfx sound-boost
				end
			end
		end
		jump player-states-done
	end
	if player-state == STATE_RUN begin
		if player-timer == 2 begin
			player-actually-move
			player-state := STATE_IDLE
			i := long dir-keys
			i += player-dir
			load vf - vf
			if vf  key then player-run
		end
		jump player-states-done
	end
	if player-state == STATE_BUMP begin
		if player-timer == 2 then player-state := STATE_IDLE
	end
	if player-state == STATE_PECK begin
		if player-timer == 3 then player-state := STATE_IDLE
	end
	: player-states-done

	player-pos
	i := player-prev
	save v2
	player-draw
}

###########################################
#
#  Entrypoint
#
###########################################

: play-level
	v0 := 0
	v1 := 0
	v2 := -1
	i := dust-prev
	save v2
	catch-bugs
	beetles-init
	map-offset-x := 8
	map-offset-y := 11
	player-x     := 15
	player-y     := 14
	map-init
	player-init
	loop
		dust-update
		player-update
		beetles-update
		sync-timer
		i := long beetle-count
		load v0
		if v0 != 0 then
	again
	caught
	sum-timer
	show-score
;

: main
	hires
	plane 3
	loop
		title
		reset-game
		play-level
		next-level
		play-level
		next-level
		play-level
	again

:calc FREE { 4096 - HERE }
: FREE_CODE_BYTES
:byte { FREE >> 8 }
:byte { FREE }
:monitor FREE_CODE_BYTES "%2i"

:monitor current-level "%i"
:monitor level-times   "%i : %i : %i\n%i : %i : %i\n%i : %i : %i"
:monitor total-time    "%i : %i : %i"
:monitor beetle-count  1
# :monitor map-offset-x  "%i %i"
# :monitor player-x      "%i %i"
